#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

class Solution {
public:
    int trailingZeroes(int n) {
        int count = 0;
        while (n)
        {
            count += n / 5;
            n /= 5;
        }
        return count;
    }
};

//
//class Solution {
//public:
//    int countPrimes(int n) {
//        if (n < 3)
//        {
//            return 0;
//        }
//        bool f[n];
//        memset(f, 0, sizeof(bool) * n);
//        f[0] = 1;
//        f[1] = 1;
//
//        for (int i = 2; i < n; i++)
//        {
//            if (!f[i])
//            {
//                for (long long j = (long long)i * i; j < n; j += i)
//                {
//                    f[j] = 1;
//                }
//            }
//        }
//        int count = 0;
//        for (int i = 2; i < n; i++)
//        {
//            if (!f[i])
//            {
//                count++;
//            }
//        }
//        return count;
//    }
//};


struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
};
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if (p == NULL && q == NULL)
        return true;
    if (!p || !q)
        return false;
    if (p->val != q->val)
        return false;
    return isSameTree(p->left, q->left)
        && isSameTree(p->right, q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
    if (root == NULL)
        return false;
    if (root->val == subRoot->val)
    {
        if (isSameTree(root, subRoot) == true)
            return true;
    }
    return isSubtree(root->left, subRoot)
        || isSubtree(root->right, subRoot);
}